import axios from 'axios'
import qs from 'qs'

// 默认超时设置
axios.defaults.timeout = 50000;

// 环境的切换，产品开发时会有开发环境、测试环境、线上环境，通过这个来切换不同的接口基础地址
// switch (process.env.NODE_ENV) {
//     case 'development':

//         // axios.defaults.baseURL = 'http://101.34.21.205:7777/showdata';
//         axios.defaults.baseURL = 'http://127.0.0.1:7777/showdata';
//         break;
//     case 'debug':
//         // axios.defaults.baseURL = 'http://101.34.21.205:7777/showdata';
//         axios.defaults.baseURL = 'http://127.0.0.1:7777/showdata';
//         break;
//     case 'production':
//     default:
//         // axios.defaults.baseURL = 'http://101.34.21.205:7777/showdata';
//         axios.defaults.baseURL = 'http://127.0.0.1:7777/showdata';
// }
// axios.defaults.baseURL="http://192.168.100.14:7777/showdata"
// axios.defaults.baseURL="http://127.0.0.1:7777/showdata"
axios.defaults.baseURL="/showdata"

axios.interceptors.request.use(function (config) {
    if(config.method === 'get'){
        // 统一加上时间戳
        config.params.t = +new Date();
        //get 请求下 参数在 params 中，其他请求在 data 中
        config.params = config.params || {};
        //一些参数处理
    }
    return config;
}, function (err) {
    return Promise.reject(err);
});

axios.interceptors.response.use(function (response) {
    //可以对返回的数据做一些统一处理，比如根据不同的 response.data.code 来判断，看是弹窗提示，还是跳转登录等
    return response;
}, function (err) {
    return Promise.reject(err);
});

/**
 * 封装 get
 * @param url
 * @param params
 * @returns {Promise}
 */
function fetch(url, params = {}) {
    return new Promise(function (resolve, reject) {
        axios.get(url,{
            params: params
        })
        .then(function (response) {
            // 这里一般情况就是根据约定好的 code 来进行处理，因为演示，所以直接 resolve 了
            // if(response.data.code === 200){
            //     //返回成功处理
            //     resolve(response.data);
            // } else {
            //     //错误处理
            // }
            resolve(response.data);
        })
        .catch(function (err) {
            reject(err);
            var msg = '请求失败！请检查网络';
            // 如果约定的有错误信息返回
            if(err.response) {
                msg = err.response.data.message;
            }
        })
    })
}

/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */
function post(url, data = {}) {
    return new Promise(function (resolve, reject) {
        axios.post(url, qs.stringify(data), {
            headers:{
                'Content-Type':'application/x-www-form-urlencoded'
            }
        })
            .then(function (response) {
                // 这里一般情况就是根据约定好的 code 来进行处理，因为演示，所以直接 resolve 了
                // if(response.data.code === 200){
                //     //返回成功处理
                //     resolve(response.data);
                // } else {
                //     //错误处理
                // }
                resolve(response.data);
            })
            .catch(function (err) {
                reject(err);
                var msg = '请求失败！请检查网络';
                // 如果约定的有错误信息返回
                if(err.response) {
                    msg = err.response.data.message;
                }
                alert(msg);
            })
    })
}

export default {
    fetch,
    post
}
